home *** CD-ROM | disk | FTP | other *** search
- unit ListBob;
- interface
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, StdCtrls;
-
- type
- TChangeEvent = procedure(Sender: TObject; PrevItemIndex: Integer) of Object;
-
- TListBob = class(TListBox)
- private
- { Private declarations }
- FPrevItemIndex: Integer;
- FOnChange: TChangeEvent;
-
- protected
- { Protected declarations }
- procedure Click; override;
- procedure WMSetCurSel(var Message: TMessage); message LB_SETCURSEL;
-
- public
- { Public declarations }
- constructor Create(AOwner: TComponent); override;
-
- procedure CreateParams(var Params: TCreateParams); override;
- Procedure SetTabStops(Val: Array of Word);
-
- published
- { Published declarations }
- property OnChange: TChangeEvent read FOnChange write FOnChange;
- end {TListBob};
-
- procedure Register;
-
- implementation
-
- constructor TListBob.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- FPrevItemIndex := -1 { default: no selection }
- end {Create};
-
- procedure TListBob.CreateParams(var Params: TCreateParams);
- begin
- inherited CreateParams(Params);
- with Params do Style := Style or LBS_USETABSTOPS
- end {CreateParams};
-
- procedure TListBob.SetTabStops(Val: Array of Word);
- begin
- SendMessage(Handle, LB_SETTABSTOPS, High(Val)-Low(Val)+1, LongInt(@Val))
- end {SetTabStops};
-
- procedure TListBob.Click;
- begin
- inherited Click;
- if FPrevItemIndex <> ItemIndex then
- if Assigned(FOnChange) then FOnChange(Self, FPrevItemIndex);
- FPrevItemIndex := ItemIndex
- end {Click};
-
- procedure TListBob.WMSetCurSel(var Message: TMessage);
- { if someone assigns a new value to ItemIndex }
- begin
- DefaultHandler(Message);
- if Assigned(FOnChange) then FOnChange(Self, FPrevItemIndex);
- FPrevItemIndex := ItemIndex
- end {WmSetCurSel};
-
- procedure Register;
- begin
- RegisterComponents('Dr.Bob', [TListBob])
- end;
-
- end.
-